#-*- codeing = utf-8 -*-
#@Time : 2020/11/25 21:10
#@Author : 阳某
#@File : 20.socket_client.py
#@Software : PyCharm

'''

我们现在要开发一个实验室的工作站监控系统，包括

安装在机房工作站上的 数据采集器 RUS

这个程序作为TCP服务端，获取资源使用数据，简称 RUS （Resource Usage Stat）

安装在监控室的管理控制台 AT

这个程序作为TCP客户端，向管理员显示资源使用数据，简称 AT （Admin Terminal）

这是我们白月黑羽实战班的 一个项目实战练习。

作为这个系统的设计者，你可以自行设计 RUS 和 AT 之间的数据传输规范，包括消息 数据格式规范。

下面是一种参考的规范：

AT 和 RUS 之间采用 TCP 长连接方式进行通讯

如果中途出现连接断开，AT 作为 TCP 客户端必须进行重连

消息整体

每个消息 都是 UTF8 编码的 字符串

由消息头 和消息体组成。

消息头 和消息体之间 用一个 换行符 （UTF8编码后的字节为 0A ）隔开。

有如下类型的消息：

控制命令

由 AT 发送给 RUS ， 下达管理控制命令。

比如：

pause 暂停数据采集
resume 恢复数据采集
RUS接收到 控制命令后，必须完成操作后必须回复响应消息，告诉 AT 命令已经接收已经完成

数据上报

由 RUS 发送给 AT，汇报采集的资源数据。 AT接收到数据后，应该回复一个接收汇报的响应消息。

消息头

消息头只包含一个信息： 消息体的长度

消息头用十进制的字符串 表示一个整数的长度

消息体

消息体用json格式的字符串 表示数据信息，如下

数据上报 RUS -> AT
{
    "type" : "report",
    "info" : {
        "CPU Usage" : "30%",
        "Mem usage" : "53%"
    }
}
数据上报响应 AT -> RUS
{
    "type" : "report-ack"
}
暂停数据上报命令 AT -> RUS
{
    "type" : "pause",
    "duration" :  200
}
其中 duration 表示暂停上报的时间，以秒为单位

恢复数据上报命令 AT -> RUS
{
    "type" : "resume"
}
命令处理响应 RUS -> AT
{
    "type" : "cmd-ack",
    "code" :  200,
    "info" : "处理成功"
}
其中code 是处理结果码，用200表示成功。 info 是处理结果文字描述。
# https://www.bilibili.com/video/BV1a7411z75u?p=4
'''

